package com.example.nacos.provider;

import com.codahale.metrics.ConsoleReporter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import java.util.concurrent.TimeUnit;

/**
 * spring.cloud.nacos.discovery.namespace=facebe59-cd7a-46a9-a262-eba0445956f3
 * # 命名空间相同，组也相同，服务才可以调用
 * spring.cloud.nacos.discovery.group=dev
 * # 同命名空间，同组，不同集群可以调用， 尽量优先同命名空间，同组，同集群来调用。
 * spring.cloud.nacos.discovery.cluster-name=sz-cluster
 * <p>
 * <p>
 * 使用nacos做配置中心时，必须使用的bootstrap.properties或者yml，bootstrap的配置优先级高于application.properties
 * <p>
 * todo 配置了version之后，需要自己的来限制版本号，根据版本号来调用，可以直接实现的灰度发布
 *
 * @author tianshuo
 */
@SpringBootApplication
public class NacosProviderApplication {

    public static void main(String[] args) throws InterruptedException {
        ConfigurableApplicationContext run  = SpringApplication.run(NacosProviderApplication.class, args);

        // 启动Reporter metrics配置，用来统计接口的tps
/*        ConsoleReporter reporter = run.getBean(ConsoleReporter.class);
        reporter.start(1, TimeUnit.SECONDS);*/

        // 加载规则 ${spring.application.name}-${profile}-${file-extension}
        // a. 所有符合规则的配置文件都会被加载，只是优先级问题
        // 关于nacos配置中心的加载优先级  nacos-provider == nacos-provider.properties   2)naocs-provider > 1) nacos-provider
        // 1.相同的名字的配置文件会相互覆盖，后面的配置会覆盖前面的配置
        // 2.粒度越细的配置，优先级越高，也就是说nacos-provider-prod.properties > nacos-provider.properties
        // 3.nacos-provider.properties
        // 4.nacos-provider
        // 4.extension
        // 5.share
        /*for (; ; ) {

            Thread.sleep(3000);
            String name = run.getEnvironment().getProperty("name");
            String age = run.getEnvironment().getProperty("age");
            String addr = run.getEnvironment().getProperty("addr");
            System.out.println("name:" + name);
            System.out.println("age:" + age);
            System.out.println("addr:" + addr);
            // 共享配置：
            String userName = run.getEnvironment().getProperty("user.name");
            String userAge = run.getEnvironment().getProperty("user.age");
            String userAddr = run.getEnvironment().getProperty("user.addr");
            String userId = run.getEnvironment().getProperty("user.id");
            System.out.print("共享配置: userName:\t" + userName + ", userAge:\t" + userAge + ", userAddr:\t" + userAddr + "\n" + " userId: " + userId);

        }*/

    }

}
